package com.ctakit.kiwi.common.core.util;

import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;

import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

@Slf4j
public class Resources {
    /**
     * 国际化资源
     */
    private static ResourceBundle resourceBundle;

    static {
        resourceBundle = ResourceBundle.getBundle("config/application");
    }

    public static void close() {
        resourceBundle = null;
    }

    /**
     * 从资源文件中返回字符串
     */
    public static String getString(String key) {
        return getString(key, "");
    }

    /***
     * 从资源文件中返回字符串  没有找到返回默认值
     * @param defaultValue 默认值
     */
    public static String getString(String key, String defaultValue) {
        if (resourceBundle == null) {
            return null;
        }

        String value;
        try {
            value = resourceBundle.getString(key);
            if (StrUtil.isBlank(value)) {
                return defaultValue;
            }
        } catch (MissingResourceException e) {
            if (log.isErrorEnabled()) {
                log.error("application.properties 中 没有找到对应的 key: " + key);
            }
            return defaultValue;
        }
        return value;

    }

    /**
     * 从资源文件中返回（长）整型
     */
    public static long getLong(String key) {
        return getInt(key, 0);
    }

    /***
     * 从资源文件中返回（长）整数  没有找到返回默认值
     * @param defaultValue 默认值
     */
    public static long getLong(String key, long defaultValue) {
        if (resourceBundle == null) {
            return defaultValue;
        }
        long value = defaultValue;
        try {
            String valueStr = resourceBundle.getString(key);
            if (StrUtil.isNumeric(valueStr)) {
                value = Long.parseLong(valueStr);
            }
        } catch (MissingResourceException e) {
            if (log.isErrorEnabled()) {
                log.error("application.properties 中 没有找到对应的 key: " + key);
            }
        }
        return value;

    }

    /**
     * 从资源文件中返回整数
     */
    public static int getInt(String key) {
        return getInt(key, 0);
    }

    /***
     * 从资源文件中返回整数  没有找到返回默认值
     * @param key
     * @param defaultValue 默认值
     * @return
     */
    public static int getInt(String key, int defaultValue) {
        if (resourceBundle == null) {
            return defaultValue;
        }
        int value = defaultValue;
        try {
            String valueStr = resourceBundle.getString(key);
            if (StrUtil.isNumeric(valueStr)) {
                value = Integer.parseInt(valueStr);
            }
        } catch (MissingResourceException e) {
            if (log.isErrorEnabled()) {
                log.error("application.properties 中 没有找到对应的 key: " + key);
            }
        }
        return value;

    }

    /***
     * 从资源文件中返回整数  没有找到返回默认值
     * @param key
     * @param defaultValue 默认值
     * @return
     */
    public static boolean getBoolean(String key, boolean defaultValue) {
        if (resourceBundle == null) {
            return defaultValue;
        }
        boolean value = defaultValue;
        try {
            String valueStr = resourceBundle.getString(key);
            if ("true".equalsIgnoreCase(valueStr)) {
                value = true;
            } else {
                value = false;
            }
        } catch (MissingResourceException e) {

            log.error("application.properties 中 没有找到对应的 key: " + key);
        }
        return value;

    }

    /**
     * 从资源文件中返回字符串并进行格式化
     */
    public static String getString(String key, Object[] args) {
        return MessageFormat.format(getString(key), args);
    }

}
